package handler

import (
	"github.com/gin-gonic/gin"
	"gochat/domain/request"
	"gochat/domain/response/result"
	"gochat/service"
)

// UserLogin @Summary 用户登录
// @Description 用户通过用户名密码登录
// @Tags 用户模块
// @Accept json
// @Produce json
// @Param data body request.LoginRequest true "登录请求体"
// @Success 200 {object} result.Result
// @Failure 400 {object} result.Result
// @Router /user/login [post]
func UserLogin(c *gin.Context) {
	var loginReq request.LoginRequest
	err := c.ShouldBindBodyWithJSON(&loginReq)
	if err != nil {
		result.Fail(c, 400, "参数错误")
		return
	}
	service.Login.Login(c, loginReq)
}

// Logout @Summary 用户登出
// @Description 当前用户注销登录
// @Tags 用户模块
// @Produce json
// @Success 200 {object} result.Result
// @Router /user/logout [post]
func Logout(c *gin.Context) {
	service.Login.Logout(c)
}

// GithubOAuth @Summary GitHub OAuth 登录
// @Description 使用 GitHub 授权登录
// @Tags 用户模块
// @Produce json
// @Param code query string true "GitHub OAuth 回调 code"
// @Success 200 {object} result.Result
// @Failure 400 {object} result.Result
// @Router /auth/github/callback [get]
func GithubOAuth(c *gin.Context) {
	code := c.Query("code")
	if len(code) == 0 {
		result.Fail(c, 400, "缺少code")
		return
	}
	service.Login.GithubOAuth(c, code)
}
